package com.yeban.bams.dao;

import com.yeban.bams.entity.Account;

import java.io.IOException;
import java.util.ArrayList;

/**
 * @Desc TODO
 * @Author yeban
 * @Date 2025/10/18
 *
 * 属性:
 * 1.当前所有的账户对象的信息,存放在集合中: Account[].
 * 2.当前账户数量index.
 * insert(Account acc)   扩容
 * selectOne(Long id,String pwd)
 * selectOne(Long id)
 * selectAll()
 */
public class ArrayListDao implements IDao<Account, ArrayList<Account>> {

    private ArrayList<Account> accs;    // 当前所有账户信息
    private Long id = 100000000000000000L;  // 初始ID

    // 初始化账户列表
    public ArrayListDao() {
        accs = new ArrayList<>();
    }

    @Override
    public Long getId() {
        return id;
    }

    @Override
    public void setId(Long id) {
        this.id = id;
    }

    @Override
    public void update(Account acc) {
    }

    @Override
    public Long createID() {
        return IDao.super.createID();
    }

    /**
     * 添加新的账号信息，List自动扩容
     * @param acc
     * @return boolean
     */
    @Override
    public boolean insert(Account acc) {
        return accs.add(acc);
    }

    /**
     * 根据id和密码查询账户
     * @param id          账户ID
     * @param password    账户密码
     * @return  银行账户
     */
    @Override
    public Account selectOne(Long id, String password) {
        // 增强for迭代查找
        for(Account acc : accs) {
            // 由于id和password已经在Bank中已经判空了，放在前面可以避免空指针异常
            if(id.equals(acc.getId()) && password.equals(acc.getPassword())) {
                return acc;
            }
        }
        return null;
    }

    /**
     * 根据id查询账户
     * @param id
     * @return 银行账户
     */
    @Override
    public Account selectOne(Long id) {
        for(Account acc : accs) {
            if(acc.getId().equals(id)) {
                return acc;
            }
        }
        return null;
    }

    /**
     * 查询所有账户
     * @return 银行账户集合
     */
    @Override
    public ArrayList<Account> selectAll() {
        if(accs == null) {
            accs = new ArrayList<>();
        }
        return accs;
    }
}
